<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // es5新增的  
        /* 
        
        13. forEach()
        + 语法: 数组.forEach( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 遍历数组
        + 返回值: 没有(undefined)


      14. map()
        + 语法: 数组.map( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 映射数组
        + 返回值: 和原始数组长度一样的数组, 只不过内部数据经过映射加工
        + 注意: 映射条件以 return 的形式书写
        // 遍历数组 然后 按照条件对每个元素进行处理 
        // 将处理好的结果返回 并且放到一个新数组中 

      15. filter()
        + 语法: 数组.filter( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 过滤数组
        + 返回值: 必然是一个新数组, 内部存储的是原始数组内过滤出来的部分数据
        + 注意: 过滤条件以 return 的形式书写


      16. find()
        + 语法: 数组.find( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 在原始数组内查找满足条件的第一项
        + 返回值: 找到的数据
        + 注意: 查找条件以 return 的形式书写


      17. findIndex()
        + 语法: 数组.findIndex( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 在原始数组内查找满足条件的第一项的索引
        + 返回值: 找到的数据的索引
        + 注意: 查找条件以 return 的形式书写


      18. every()
        + 语法: 数组.every( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 判断数组内是否每一个都满足条件
        + 返回值: 一个布尔值
          => true, 说明数组内每一个数据都满足条件
          => false, 说明数组内至少有一个是不满足条件的
        + 注意: 判断条件以 return 的形式书写


      19. some()
        + 语法: 数组.some( function (item, index, origin) {} )
          => item: 表示数组的每一项
          => index: 表示数组每一项的索引
          => origin: 表示原始数组
        + 作用: 判断数组内是否有某一个满足条件
        + 返回值: 一个布尔值
          => true, 说明数组内至少有某一个是满足条件的
          => false, 说明数组内所有的项都不满足条件
        + 注意: 判断条件以 return 的形式书写


      20. reduce()
        + 语法: 数组.reduce(function (prev, item, index, origin) {}, init)
          => prev: 表示初始值或者上一次的运算结果
          => item: 表示数组的每一项
index: 表示          => 数组每一项的索引
          => origin: 表示原始数组
        + 作用: 用来实现叠加效果
        + 返回值: 最终叠加结果
        + 注意: 叠加条件以 return 的形式书写
        + 注意: prev 的值, 如果你传递了 init, 就是 init 的值, 如果你没有传递 init, 那么就是数组 [0] 的值
        + 注意: 如果你传递了 init, 循环执行 length 次, 如果你没有传递 init, 循环执行 length - 1 次, 少的是第一次
        
        
        
        */

        // var xiaobao = ['双儿','曾柔','建宁公主','沐剑屏','阿珂','方怡','苏荃'];

        // for(var i=0;i<xiaobao.length;i++){
        //     console.log(xiaobao[i],xiaobao)
        // }

        // xiaobao.forEach(function(item,index,origin){
        //     console.log(item,index,origin);
        // });


        // var urls = ['www.baidu.com','www.qfedu.com','www.so.com','www.openai.com'];

        // var res = urls.map(function(item){
        //     return 'https://'+item
        // });

        // console.log(res);


        students = [
            {
                'name': '小*', 'age': 19, 'score': 90, 'gender': '女', 'tel':
                    '15312342839'
            },
            {
                'name': '明*', 'age': 20, 'score': 40, 'gender': '男', 'tel':
                    '15312342838'
            },
            {
                'name': '华**', 'age': 18, 'score': 92, 'gender': '女', 'tel':
                    '15312342839'
            },
            {
                'name': '静*', 'age': 16, 'score': 92, 'gender': '不明', 'tel':
                    '15312342428'
            },
            {
                'name': 'To*', 'age': 17, 'score': 59, 'gender': '不明', 'tel':
                    '15312342839'
            },
            {
                'name': 'Bo*', 'age': 18, 'score': 92, 'gender': '男', 'tel':
                    '15312342839'
            }
        ];//不及格学生的名字和成绩  


        // filter 

        // var res = students.filter(function(item){
        //     return item['score'] < 60
        // });

        // console.log(res);
        // for(var v of res){
        //     console.log(v['name'],v['score'])
        // }


        // reduce 
        // 不写init
        // students.reduce(function(prev,item,index,origin){
        //     console.log('prev的结果是',prev); // 没有传init 
        //     // prev 就是students下标0对应的元素
        // });
        
        // // 写上init 
        // students.reduce(function(prev,item,index,origin){
        //     console.log('prev的结果是',prev);
        //     // 传了init prev 就是 init的值
        // },668);
        // 求总成绩  初始值  0 
        // var res = students.reduce(function(prev,item,index,origin){
        //     return prev + item['score']
        // },0);

        // console.log(res);


        // var res = students.reduce(function(prev,item,index,origin){
        //     return prev + item['score']
        // });
        // // 因为没有写初始值 所以prev 是 students下标0 对应的值 
        // // 是个对象 所以结果是对象+40+90+...

        // console.log(res); //[object Object]4092925992

    </script>
</body>

</html>